﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Foundation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Media.Animation;

namespace FlyOut
{
    class FlyOutControle
    {
        /// <summary>
        /// _variriavel que ira guardar o nome do titulo
        /// </summary>
        private string _titulo;


        /// <summary>
        /// variavel que ira guardar a instancia do user control(FlyOut)
        /// </summary>
        private FlyOut _flyout;


        /// <summary>
        /// Variavel que ira guardar a instancia do popup que ira conter o user control e formar o flyout
        /// </summary>
        private Popup _popup;


        /// <summary>
        /// Varial do software
        /// </summary>
        private Object _project;


        /// <summary>
        /// Variavel que ira guardar a instancia do usercontrol que sera adcionado dentro do flyout
        /// </summary>
        private UserControl _usercontrol; 


        /// <summary>
        /// Contrutor da classe.
        /// </summary>
        /// <param name="Titulo">Titulo principal do FlyOut</param>
        /// /// <param name="Project">Instancia do projeto</param>
        FlyOutControle(string Titulo, Object Project)
        {
            _titulo = Titulo;
            // carrecar todos as necessidades
            IniciaConfiguracoes();
        }

        private async void IniciaConfiguracoes()
        {
            Construir();
            await AcertarTamanho();
            await SetTranzicoes();
        }

        private async Task SetTranzicoes()
        {
            /*Adcionar mais opcoes de trasicoes e talves uma historeboard*/
            var transitions = new TransitionCollection();
            transitions.Add(new PopupThemeTransition() { FromHorizontalOffset = 100, FromVerticalOffset = 0 });
            _popup.Transitions = transitions;
        }

        /// <summary>
        /// Contrutor da classe 
        /// </summary>
        /// <param name="Titulo">Titulo principal do Flyout</param>
        /// <param name="Project">Instancia do projeto</param>
        /// <param name="Usercontrol">User control que sera adcionado a o Flyout</param>
        FlyOutControle(string Titulo, Object Project, UserControl Usercontrol)
        {
            _titulo = Titulo;
            _usercontrol = Usercontrol;
            Construir();
            _flyout.Add(Usercontrol);
           
        }


        /// <summary>
        /// Faz as ações iniciais do programas
        /// </summary>
        private void Construir()
        {
            if (_flyout == null)
            {
                _flyout = new FlyOut(_popup);
            }
            if (_popup == null)
            {
                _popup = new Popup();
            }
        }

        public void Add(UserControl usercontrol)
        {
            if (_usercontrol == null)
            {
                _flyout.Add(usercontrol);
            }
            else
            {
                Exception exception = new Exception("O FlyOut ja possui um UserControl relacionado");
            }
        }
        private async Task AcertarTamanho()
        {
            Rect bounds = Window.Current.Bounds;
            double height = bounds.Height;
            double width = bounds.Width;

            _popup.HorizontalOffset = height;
            _popup.VerticalOffset = width - _flyout.Width;
        }
    }
}
